/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.com.fastfood4.rie.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import pe.com.fastfood4.rie.model.Plato;

/**
 * PlatoDaoImpl.java es la implementacion de PlatoDao.java
 * @author grupo 06 - upc_dew 2010
 */
public class PlatoDaoImpl extends SimpleJdbcDaoSupport implements PlatoDao{

    /** obtiene platos por codigo de reserva (idReserva) */
    public List<Plato> getPlatosPorIdReserva(String idReserva) {
        logger.info("Obteniendo Platos con idReserva: " + idReserva);

        List<Plato> platos = getSimpleJdbcTemplate().query(
            "select Platos.idPlato, nombre, descripcion, precioUnitario, cantidadPersonas " +
            "from Reservas, DetalleReservas, Platos  " +
            "where Reservas.idDetalleReserva = DetalleReservas.idDetalleReserva " +
            "and DetalleReservas.idPlato = Platos.idPlato " +
            "and Reservas.idReserva = :idReserva",
            new PlatoMapper(),
            new MapSqlParameterSource()
                .addValue("idReserva", idReserva));

        logger.info("Platos optenidos: " + platos);
        return platos;
    }

    private static class PlatoMapper implements ParameterizedRowMapper<Plato> {

        public Plato mapRow(ResultSet rs, int rowNum) throws SQLException {
            Plato plato = new Plato();
            plato.setIdPlato(rs.getInt("idPlato"));
            plato.setNombre(rs.getString("nombre"));
            plato.setDescripcion(rs.getString("descripcion"));
            plato.setPrecioUnitario(rs.getLong("precioUnitario"));
            plato.setCantidadPersonas(rs.getInt("cantidadPersonas"));
            return plato;
        }
    }
}
